package com.itheima.d10_parse_annotation.Demo02;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/*
需求：
    定义若干个方法，只要加了MyTest注解，就可以在启动时被触发执行
分析：
    定义一个自定义注解MyTest，只能注解方法，存活范围是一直都在。
    定义若干个方法，只要有@MyTest注解的方法就能在启动时被触发执行，没有这个注解的方法不能执行。

 */
public class Demo02 {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //解析Calculator相关的方法，看看上面有没有@MyTest注解，如果有则执行
        Class<CalculatorTest> cls = CalculatorTest.class;

        //创建一个对象，进行运行使用
        Constructor<CalculatorTest> con = cls.getConstructor();
        CalculatorTest obj = con.newInstance();

        Method[] methods = cls.getDeclaredMethods();
        for (Method method : methods) {
            if (method.isAnnotationPresent(MyTest.class)) {
                //方法运行起来
                method.invoke(obj);
            }
        }
    }
    
}
